﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI.WebControls;
using vudu.Presentacion.Contrato.VU_15_Gestion_de_Acceso;
using vudu.Logica.Fachada;
using vudu.ClasesDominio;
using vudu.Presentacion.Vista.VU_15_Gestion_de_Acceso;

namespace vudu.Presentacion.Presentador.VU_15_Gestion_de_Acceso
{
    public class PresentadorInicioSistema
    {
        private IContratoInicioSistema _vista;
        private EnlaceLogico _fachada = new EnlaceLogico();
        private String _mensajeErrorDatos = "Operación Fallida: Error en datos Ingresados.";
        private String _mensajeErrorInicio = "El nombre de usuario o la contraseña introducidos no son correctos.";
        private System.Drawing.Color _colorMensajeError = System.Drawing.Color.Red;
        private System.Drawing.Color _colorMensajeExitoso = System.Drawing.Color.Green;
        private System.Drawing.Color _colorLabelBase = System.Drawing.Color.Black;
        private String _classMensajeExitoso = "transaccionExitosa";
        private String _classMensajeError = "transaccionFallida";

        public  PresentadorInicioSistema (IContratoInicioSistema vista, EnlaceLogico fachada)
        {
            _vista = vista;
            _fachada = fachada;

        }

        public PresentadorInicioSistema(IContratoInicioSistema vista)
        {
            _vista = vista;
        }

        
        public int BuscarIdConectado(string nickname, string pass)
        {
            int rol = 0;
            int tipoDominio;
            
            tipoDominio = ObtenerTipoUsuarioVista(_vista.TipoUsuario.SelectedValue.ToString());

                if (tipoDominio == 1)
                {
                    
                    rol = _fachada.UsuarioActualEstudiante(nickname, pass);
                }

                if (tipoDominio == 2)
                {
                    rol = _fachada.UsuarioActualProfesor(nickname, pass);
                }

                if (tipoDominio == 3)
                {
                    rol = _fachada.UsuarioActualEscuela(nickname, pass);
                    
                }

                if (tipoDominio == 4)
                {
                    rol = _fachada.UsuarioActualUniversidad(nickname,pass);
                }

            return rol;
            
        }
        
        public void AutenticarUsuario()
        {
            String nick = _vista.NickName.Text + _vista.Dominio.Text;
            String pass = _vista.Password.Text;
            int rol = BuscarIdConectado(nick, pass);
            int tipoDominio = ObtenerTipoUsuarioVista(_vista.TipoUsuario.SelectedValue.ToString());
            bool obligatorio = ValidarFormulario(_vista.NickName, _vista.Password);


            try
            {
                if (obligatorio)
                {
                    if (rol != 0)
                    {
                        if (tipoDominio == 4)
                        {
                            Rol rolito = _fachada.CargarUsuarioDeUniversidad(rol);
                            _vista.Sesion["Fachada"] = _fachada;
                            _vista.Sesion["TipoRol"] = "Universidad";
                            _vista.Sesion["Correo"] = nick;
                            _vista.Redireccionar("../HomePages/HomeUniversidad.aspx");
                        }

                        if (tipoDominio == 3)
                        {
                            Rol rolito = _fachada.CargarUsuarioDeEscuela(rol);
                            _vista.Sesion["Fachada"] = _fachada;
                            _vista.Sesion["TipoRol"] = "Escuela";
                            _vista.Sesion["Correo"] = nick;
                            _vista.Redireccionar("../HomePages/HomeEscuela.aspx");
                        }

                        if (tipoDominio == 2)
                        {
                            Rol rolito = _fachada.CargarUsuarioDeProfesor(rol);
                            _vista.Sesion["Fachada"] = _fachada;
                            _vista.Sesion["TipoRol"] = "Profesor";
                            _vista.Sesion["Correo"] = nick;
                            _vista.Redireccionar("../HomePages/HomeProfesor.aspx");
                        }

                        if (tipoDominio == 1)
                        {
                            Rol rolito = _fachada.CargarUsuarioDeEstudiante(rol);
                            _vista.Sesion["Fachada"] = _fachada;
                            _vista.Sesion["TipoRol"] = "Estudiante";
                            _vista.Sesion["Correo"] = nick;
                            _vista.Redireccionar("../HomePages/HomeEstudiante.aspx");
                        }
                    }


                    else if (rol == 0)
                    {
                        CambiarMensaje(2);
                        BorrarPassword();


                    }
                }

                else
                {
                    CambiarMensaje(1);

                }

            }
            catch (Exception)
            {

                throw;
            }
        }


        #region validaciones de la interfaz

        public void ControlPassword ()
        {
            _vista.Password.Attributes["Value"] = _vista.Password.Text;
        }

        public void BorrarPassword()
        {
            _vista.Password.Attributes["Value"] = "";
        }

        public void ValidarDominio()
        {
            _vista.Dominio.Visible = false;

            int tipoDominio;
            tipoDominio = ObtenerTipoUsuarioVista(_vista.TipoUsuario.SelectedValue.ToString());

            if (_vista.TipoUsuario.SelectedValue.ToString() == "Seleccione")

                _vista.Dominio.Visible = false;
            

            else
            {
                
                if (tipoDominio == 1)
                 {
                     _vista.Dominio.Text = "@est.vudu.com";
                     _vista.Dominio.Visible = true;
                     _vista.Password.Text = _vista.Password.Text;
             
                 }

                 else if (tipoDominio == 2)
                 {
                     _vista.Dominio.Text = "@prof.vudu.com";
                     _vista.Dominio.Visible = true;

                 }

                 else if (tipoDominio == 3)
                 {
                     _vista.Dominio.Text = "@esc.vudu.com";
                     _vista.Dominio.Visible = true;

                 }

                 else if (tipoDominio == 4)
                 {
                     _vista.Dominio.Text = "@univ.vudu.com";
                     _vista.Dominio.Visible = true;

                 }

               

             }
            
            
        }


        public bool ValidarFormulario (TextBox nick, TextBox pass)
        {
            bool respuesta = true;
            bool validarUsuario = ValidarObligatorio(nick);
            bool validarPass = ValidarObligatorio(pass);

            respuesta = validarUsuario && validarPass;
            return respuesta;

            
        }

        public void CambiarMensaje(int valida)
        {
            if (valida == 1)
            {
                _vista.MensajedeError.Text = _mensajeErrorDatos;
                _vista.MensajedeError.ForeColor = _colorMensajeError;
                _vista.MensajedeError.Visible = true; 
            }

            else
            {
                _vista.MensajedeError.Text = _mensajeErrorInicio;
                _vista.MensajedeError.ForeColor = _colorMensajeError;
                _vista.MensajedeError.Visible = true;
            }
            
        }

        public bool ValidarObligatorio(TextBox textBoxAValidar)
        {
            String campo = textBoxAValidar.Text;
            Regex regex = new Regex(@"(\s)");
            int espacios = regex.Matches(campo).Count;

            if (campo.Length == 0 || espacios == campo.Length)
            {
                
                return false;
            }
            else
            {
                
                return true;
            }
        }

       

        public void MensajesBlancos()
        {
            _vista.NickName.Text = "";
            _vista.Password.Text = "";
        }


        #region validacion de tipo

        public int ObtenerTipoUsuarioVista ( String tipoDominio)

        {
            int tipo = 0;

            tipoDominio = _vista.TipoUsuario.SelectedValue.ToString();

            if (tipoDominio == "Estudiante")
                tipo = 1;
            else if (tipoDominio == "Profesor")
                tipo = 2;
            else if (tipoDominio == "Escuela")
                tipo = 3;
            else if (tipoDominio == "Universidad")
                tipo =4;

            return tipo;

        }


        #endregion

    #endregion



    }
}